package com.example.fresheveryday.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/file")
public class FileController {
    @PostMapping("addFile")
    public Map addFile(MultipartFile file) throws Exception{
        System.out.println(file);
// 这个map用于返回imageUrl，imageId之类的数据
        Map<String,Object> map = new HashMap<>();
        try {
// 1）设置文件的目录
//按照月份进行分类：
            Calendar calendar = Calendar.getInstance();
            calendar.get(Calendar.YEAR);
            String yearMonth = calendar.get(Calendar.YEAR) + "y" +
                    (calendar.get(Calendar.MONTH) + 1)+"m";
            String filePath = "D:\\images\\upload\\"+ yearMonth ; //项目路径+年月份
// 创建文件目录
            File realPath = new File(filePath); //上传文件保存地址：realPath ="E:\\images\\upload\\2022y5m"
            if (!realPath.exists()){
                boolean mkdirs = realPath.mkdirs();//创建文件目录，可以创建多层目录
            }
//2）设置文件名字
            String fileRealName=file.getOriginalFilename();
            String suffix = fileRealName.substring(fileRealName.lastIndexOf(".") + 1);
//后缀 jpg png
//解决文件名字问题：使用uuid的方式;
            String fileName = "file-"+ UUID.randomUUID().toString().replaceAll("-",
                    "") + "." + suffix;
//3）进行文件保存，通过CommonsMultipartFile的方法直接写文件
            file.transferTo(new File(realPath + File.separator+ fileName));
//4）返回图片的名字，url，如果只是保存文件，下面的语句可以不写
            String fileUrl = File.separator+"file"+File.separator+"upload"
                    +File.separator+ yearMonth +File.separator+fileName;
//前端的FILE_API为http://localhost:9222/file
            map.put("fileName",fileName);
            map.put("fileUrl",fileUrl); //传到前端的url，例如： /upload/2022y5m/xxx.jpg
        } catch (IOException e) {
            e.printStackTrace();
        }
        return map;
    }
}